import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_homemonitor/pages/Launch.dart';
import 'package:flutter_homemonitor/util/DatabaseHelper.dart';
import 'package:sqflite/sqflite.dart';

void main() async {
  // 确保 Flutter 绑定初始化
  // 在使用 Flutter 的异步操作（如数据库操作）之前，需要调用此方法来初始化 Flutter 的绑定。
  // 这是 Flutter 应用程序启动时的必要步骤，确保可以使用 Flutter 提供的异步功能。
  WidgetsFlutterBinding.ensureInitialized();

  // 创建 DatabaseHelper 的实例
  // DatabaseHelper 是一个封装类，用于管理本地化数据的保存、获取、移除等操作。
  var dbHelper = DatabaseHelper();

  // 保存数据到数据库
  // 调用 DatabaseHelper 的 saveLocalization 方法，将键 'language' 和值 'en' 保存到数据库中。
  // 这里的 'language' 是一个示例键，'en' 是对应的值，表示语言设置为英语。
  print('Saved saveLocalization:');
  // await dbHelper.saveLocalization('localization', 'en', '10');
  print('Saved saveLocalization222222:');

  // 从数据库中获取保存的数据
  // 调用 DatabaseHelper 的 getLocalization 方法，通过键 'language' 获取对应的值。
  // 如果数据库中存在该键，则返回对应的值；否则返回 null。
  Map<String, dynamic>? language =
      await dbHelper.getLocalization('localization', 'language', 'cn');
  // 打印获取到的语言设置
  // 如果成功获取到值，则打印 'Saved language: en'；否则打印 'Saved language: null'。
  print('Saved language-CN: ' + json.encode(language));

  List<Map<String, dynamic>>? languagelist =
      await dbHelper.querytable('localization');

  print('Saved language-list: ' + json.encode(languagelist));

  // 判断数据库中是否有保存的数据
  // 调用 DatabaseHelper 的 hasLocalization 方法，检查键 'language' 是否存在于数据库中。
  // 如果存在，返回 true；否则返回 false。
  bool hasLanguage =
      await dbHelper.hasLocalization('localization', 'language', 'cn');
  // 打印判断结果
  // 如果存在该键，则打印 'Has language: true'；否则打印 'Has language: false'。
  print('Has language-cn: $hasLanguage');

  // 从数据库中移除保存的数据
  // 调用 DatabaseHelper 的 removeLocalization 方法，通过键 'language' 删除对应的记录。
  // await dbHelper.removeLocalization('localization', 'language', 'en');

  // 再次判断数据库中是否有保存的数据
  // 再次调用 hasLocalization 方法，检查键 'language' 是否还存在于数据库中。
  hasLanguage =
      await dbHelper.hasLocalization('localization', 'language', 'en');
  // 打印判断结果
  // 由于已经删除了该键，因此打印 'Has language after removal: false'。
  print('Has language after removal: $hasLanguage');

  // List<Map<String, dynamic>>? languagelist2 =
  //     await dbHelper.querytable('localization');
  //
  // print('Saved language-list222: ' + json.encode(languagelist2));

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // TRY THIS: Try running your application with "flutter run". You'll see
        // the application has a purple toolbar. Then, without quitting the app,
        // try changing the seedColor in the colorScheme below to Colors.green
        // and then invoke "hot reload" (save your changes or press the "hot
        // reload" button in a Flutter-supported IDE, or press "r" if you used
        // the command line to start the app).
        //
        // Notice that the counter didn't reset back to zero; the application
        // state is not lost during the reload. To reset the state, use hot
        // restart instead.
        //
        // This works for code too, not just values: Most code changes can be
        // tested with just a hot reload.
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: launch(),
    );
  }
}
